CosenseのMongoDB query cursor使ってる箇所を総点検
from scrapbox.ioのみ時間経過でメモリ使用量が増加する原因を、Codex CLIとともに探る
Helpfeel専用Cosense Export APIはMongoDB query cursorを閉じ忘れていると同じような、MongoDB query cursorの閉じ忘れ箇所を洗い出す
対策としては同じ様にfinally内でcursor.close()するか
mongoose 6以降ではcursor()呼び出さずにqueryを直接for await...ofで回せるのように書くか
mongo query cursorはfor awaitで回せる
git show a602aefebb01e0e1367b098ccc516ab9ab6ea199で変更を把握してshokai.icon
このcommitで修正しているHelpfeel専用export API以外で、同じ様な修正が必要な場所が他あれば修正したい
commitの内容を確認しました。これはMongooseのcursorを使用しているループ内で、早期return時にcursor.close()が呼ばれずにリソースリークが発生していた問題の修正ですね。Claude Code.icon
try-finallyブロックでcursorのclose()を確実に呼び出すように修正されています。
同様のパターンがないか、コードベース全体を調査します。
サーバーコントローラー (4個)
1. src/server/controllers/projects/audit-logs.js - business project向け監査ログ機能
done.icon business project用監査ログの出力中にクライアント側からstreamが閉じられた場合に、MongoDB query cursorがcloseできていなかった #7939
2. src/server/controllers/gcs/delete.js - GCSファイル削除ボタン
3. src/server/controllers/gcs/duplicate-between-projects.js - project間のGCSファイル複製ボタン
4. src/server/models/project/json-export.js - Project JSON Export
13. src/server/models/project/elasticsearch.js - Elasticsearch同期処理
project.updateEsIndex()でまとめてpageとfileをESに投入する処理
上の4つまとめて修正するshokai.icon
done.icon MongoDB query cursorをcloseし忘れている所をmongooseのfor awaitで書き直し(サーバープロセスのみ) #7940
20251111-230949.txt with Claude Code.icon
漏れがあった。ここでもcursor使ってる
src/server/models/commit/hooks/page-infobox.js - Commit hookからのinfobox更新
修正方針が間違っていたshokai.icon
安易にfor awaitを使うべきではない
mongooseのfind query cursorは色々な回し方があるけどどれ使えばいいの?にまとめたshokai.icon
2,3,4,13,infoboxの5つをまとめて修正
done.icon サーバー側ではMongoDB query cursorをfinallyでしっかりcloseする #7944
20251113-042511.txt with Claude Code.icon
2025/11/13(木) 04:34リリース
タスク/バッチ処理 (8個)
5. tasks/delete-unused-projects/index.js - 未使用プロジェクト削除
6. tasks/migrations/page-title.js - ページタイトルマイグレーション
7. tasks/migrations/revert-page-title.js - ページタイトル復元
8. tasks/migrations/page-descriptions.js - ページ説明マイグレーション
9. tasks/migrations/page-icons.js - ページアイコンマイグレーション
10. tasks/fetch-missing-file-text/index.js - 欠落ファイルテキスト取得
これは例外
11. tasks/batches/delete-gcs-objects/file/index.js - GCSファイル削除バッチ
12. tasks/batches/delete-gcs-objects/project-backup/index.js - プロジェクトバックアップ削除バッチ
dead.icon tasks/の中のMongoDB query cursorをなるべくmongooseのfor awaitで書き直し #7942
安易にnoCursorTimeoutを外すべきではない事がわかった為
MongoDBのCursor not foundエラーやnoCursorTimeoutオプションとの向き合い方にまとめたshokai.icon